/* 
 * File:   Entier.cpp
 * Author: Gab'z
 * 
 * Created on 1 mai 2012, 19:46
 */

#include "Entier.h"

Entier* Entier::clone() const {
    return new Entier(_x);
}

double Entier::value() const {
    return (double) _x;
};

std::string Entier::toString() const {
    // utiliser un flux de sortie pour créer la chaîne
    std::ostringstream oss;
    // écrire la valeur dans le flux
    oss << _x;
    // renvoyer une string
    return oss.str();
}

Entier::~Entier() {
}

Entier& Entier::operator+=(const Entier& e) {
    _x += e._x;
    return *this;
}

Entier& Entier::operator-=(const Entier& e) {
    _x -= e._x;
    return *this;
}

Entier& Entier::operator*=(const Entier& e) {
    _x *= e._x;
    return *this;
}

Entier& Entier::operator/=(const Entier& e) {
    if (e._x == 0) throw std::invalid_argument("Division par 0 d'un entier");
    _x /= e._x;
    return *this;
}

Entier& Entier::operator%=(const Entier& e) {
    _x = _x - e._x * (_x / e._x);
    return *this;
}

Entier operator+(const Entier& e1, const Entier& e2) {
    Entier e(e1);
    e += e2;
    return e;
}

Entier operator-(const Entier& e1, const Entier& e2) {
    Entier e(e1);
    e -= e2;
    return e;
}

Entier operator*(const Entier& e1, const Entier& e2) {
    Entier e(e1);
    e *= e2;
    return e;
}

Entier operator/(const Entier& e1, const Entier& e2) {
    Entier e(e1);
    e /= e2;
    return e;
}

Entier operator%(const Entier& e1, const Entier& e2) {
    Entier e(e1);
    e %= e2;
    return e;
}
